import {
  initDatabase,
  saveUserConfig,
  getUserConfig,
  getAllUserConfigs,
  deleteUserConfig,
} from "../utils/database";

// 文本配置接口
interface TextConfig {
  title: string;
  content: string;
  fontSize: number;
  color: string;
  fontFamily: string;
}

// 测试函数
export const testDatabaseStorage = async () => {
  console.log("🧪 开始数据库存储测试...");

  try {
    // 1. 初始化数据库
    const initSuccess = await initDatabase();
    if (!initSuccess) {
      throw new Error("数据库初始化失败");
    }

    // 2. 准备测试数据
    const userId = "admin";
    const configType = "文本配置";
    const textConfig: TextConfig = {
      title: "测试标题",
      content: "这是一段测试文本内容",
      fontSize: 16,
      color: "#333333",
      fontFamily: "Microsoft YaHei",
    };

    console.log("📝 准备存储的文本配置:", textConfig);

    // 3. 保存用户配置
    const saveSuccess = await saveUserConfig(userId, configType, textConfig);
    if (!saveSuccess) {
      throw new Error("保存配置失败");
    }

    // 4. 获取刚保存的配置
    const retrievedConfig = await getUserConfig(userId, configType);
    console.log("📖 获取到的配置:", retrievedConfig);

    // 5. 验证数据一致性
    if (JSON.stringify(retrievedConfig) === JSON.stringify(textConfig)) {
      console.log("✅ 数据一致性验证通过");
    } else {
      console.log("❌ 数据一致性验证失败");
    }

    // 6. 更新配置测试
    const updatedConfig: TextConfig = {
      ...textConfig,
      title: "更新后的标题",
      fontSize: 18,
      color: "#666666",
    };

    console.log("🔄 更新配置...");
    await saveUserConfig(userId, configType, updatedConfig);

    const updatedRetrieved = await getUserConfig(userId, configType);
    console.log("📖 更新后的配置:", updatedRetrieved);

    // 7. 获取用户所有配置
    const allConfigs = await getAllUserConfigs(userId);
    console.log("📚 用户所有配置:", allConfigs);

    // 8. 测试多种配置类型
    await saveUserConfig(userId, "基本配置", {
      theme: "dark",
      language: "zh-cn",
    });
    await saveUserConfig(userId, "高级配置", {
      autoSave: true,
      backupInterval: 300,
    });

    const allConfigsAfter = await getAllUserConfigs(userId);
    console.log("📚 保存多个配置后的所有配置:", allConfigsAfter);

    console.log("🎉 数据库存储测试完成！");
    return true;
  } catch (error) {
    console.error("❌ 测试失败:", error);
    return false;
  }
};

// 清理测试数据
export const cleanupTestData = async () => {
  try {
    const userId = "admin";
    await deleteUserConfig(userId, "文本配置");
    await deleteUserConfig(userId, "基本配置");
    await deleteUserConfig(userId, "高级配置");
    console.log("🧹 测试数据清理完成");
  } catch (error) {
    console.error("清理测试数据失败:", error);
  }
};

// 如果直接运行此文件，执行测试
if (typeof window !== "undefined") {
  // 浏览器环境
  (window as any).testDatabaseStorage = testDatabaseStorage;
  (window as any).cleanupTestData = cleanupTestData;

  console.log("🔧 测试函数已挂载到 window 对象");
  console.log("可以在浏览器控制台中运行:");
  console.log("- testDatabaseStorage() // 执行测试");
  console.log("- cleanupTestData() // 清理测试数据");
}
